package es.ojugames.trocolaengine.physicsengine;

import es.ojugames.trocolaengine.physicsengine.auxiliary.Vector2D;

/**
 * Clase Abstracta que servira de base para la definicion de todos los tipos de fuerzas.
 * 
 * @version 1.0
 * @author DieCrenes
 * @author JMPergar
 */
public class BasicForce {

	/** Vector que indica la direccion de la fuerza */
	private Vector2D direccion;
	
	/** Magnitud de la fuerza */
	private Float magnitud;

	public BasicForce() {
		super();
	}

	/**
	 * Constructor de Force al que se le pasa una direccion y una magnitud.
	 * @param direccion
	 * @param magnitud
	*/
	public BasicForce(Vector2D direccion, Float magnitud) {
		
		this.direccion = direccion;
		
		if(magnitud >= 0) {
			this.magnitud = magnitud;
		} else {
			throw new IllegalArgumentException("La magnitud de la fuerza debe ser positiva");
		}
	}
	
	/**
	 * Metodo abstracto que avanza la simulacion "tiempoDelta" segundos. Cada
	 * tipo de fuerza implementara este metodo segun actue su fisica.
	 * @param tiempoDelta
	 */
	public void simularPasoFuerza(Float tiempoDelta) {
		/** En el caso de la BasicForce la fuerza es constante e instantanea */
	}

	/**
	 * Metodo que devuelve la direccion de la fuerza.
	 * @return Vector2D direccion
	 */
	public Vector2D getDireccion() {
		return direccion;
	}
	
	/**
	 * Metodo que cambia la direccion de la fuerza.
	 * @param direccion
	 * @exception IllegarArgumentException La direccion debe ser de bidimensional
	 */
	public void setDireccion(Vector2D direccion) {
		this.direccion = direccion;
	}

	/**
	 * Metodo que devuelve la magnitud de la fuerza.
	 * @return Vector<Float> fuerza
	 */
	public Float getMagnitud() {
		return magnitud;
	}
	
	/**
	 * Metodo que cambia la magnitud de la fuerza.
	 * @param fuerza
	 * @exception IllegarArgumentException La magnitud de la fuerza debe ser positiva
	 */
	public void setMagnitud(Float magnitud) {
		if(magnitud >= 0) {
			this.magnitud = magnitud;
		} else {
			throw new IllegalArgumentException("La magnitud de la fuerza debe ser positiva");
		}
		
	}
}
